box: Fix rtl allocation with center widget
authorMatthias Clasen <mclasen@redhat.com>
Sat, 20 Feb 2016 21:41:53 +0000 (16:41 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 20 Feb 2016 21:45:26 +0000 (16:45 -0500)
The code for adjusting the center widget allocation in case
of uneven sides never worked right in RTL. This was finally
noticed for tabs with close button, which commonly use a
centered label.

gtk/gtkbox.c

index d0e9d3dc0fef6256ffbb2cf27698d5bee35c513e..16df01d137ce2ed07d5da22f19b03f41d433a4b8 100644 (file)
@@ -1063,7 +1063,8 @@ gtk_box_size_allocate_with_center (GtkWidget           *widget,
         {
           child_allocation.y = allocation->y;
           child_allocation.height = MAX (1, allocation->height);
-          if (packing == GTK_PACK_START)
+          if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) ||
+              (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL))
             x = allocation->x;
           else
             x = allocation->x + allocation->width;
@@ -1110,7 +1111,8 @@ gtk_box_size_allocate_with_center (GtkWidget           *widget,
                   child_allocation.x = x + (child_size - child_allocation.width) / 2;
                 }
 
-              if (packing == GTK_PACK_START)
+              if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) ||
+                  (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL))
                 {
                   x += child_size + priv->spacing;
                 }
@@ -1119,10 +1121,6 @@ gtk_box_size_allocate_with_center (GtkWidget           *widget,
                   x -= child_size + priv->spacing;
                   child_allocation.x -= child_size;
                 }
-
-              if (direction == GTK_TEXT_DIR_RTL)
-                child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width;
-
             }
           else /* (private->orientation == GTK_ORIENTATION_VERTICAL) */
             {
@@ -1164,10 +1162,16 @@ gtk_box_size_allocate_with_center (GtkWidget           *widget,
   else
     center_pos = allocation->y + (box_size - center_size) / 2;
 
-  if (center_pos < side[GTK_PACK_START])
-    center_pos = side[GTK_PACK_START];
-  else if (center_pos + center_size > side[GTK_PACK_END])
-    center_pos = side[GTK_PACK_END] - center_size;
+  if (priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
+      direction == GTK_TEXT_DIR_RTL)
+    packing = GTK_PACK_END;
+  else
+    packing = GTK_PACK_START;
+
+  if (center_pos < side[packing])
+    center_pos = side[packing];
+  else if (center_pos + center_size > side[1 - packing])
+    center_pos = side[1 - packing] - center_size;
 
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {